<?php
/**
 * Workerman-TP6
 *
 * @copyright © 2022 by 技术先锋 All rights reserved。
 * @Created   by PhpStorm.
 * @author    StarsPhp
 * @date      2023/2/7
 * @time      16:12
 */

/**
 * This file is part of workerman.
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the MIT-LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @author walkor<walkor@workerman.net>
 * @copyright walkor<walkor@workerman.net>
 * @link http://www.workerman.net/
 * @license http://www.opensource.org/licenses/mit-license.php MIT License
 */
use \Workerman\Worker;
use \GatewayWorker\Gateway;
use \Workerman\Autoloader;

require_once __DIR__ . '/../../../vendor/autoload.php';

// 获取配置
$config = \think\facade\Config::get('workerman.gateway');

$port = $config['protocol_port'];

// gateway 进程
$gateway = new Gateway($config['protocol'] . $config['protocol_ip'] . ':' .$port);
// 设置名称，方便status时查看
$gateway->name = $config['name'] . ':' . $port;
// 设置进程数，gateway进程数建议与cpu核数相同
$gateway->count = $config['count'];
// 分布式部署时请设置成内网ip（非127.0.0.1）
$gateway->lanIp = $config['lanIp'];
// 内部通讯起始端口。假如$gateway->count=4，起始端口为2300
// 则一般会使用2300 2301 2302 2303 4个端口作为内部通讯端口
$gateway->startPort = $config['startPort'];
// 服务注册地址
$gateway->registerAddress = $config['registerAddressIp'] . ':' . $config['registerAddressPort'];

// 其中pingNotResponseLimit = 0代表服务端允许客户端不发送心跳，服务端不会因为客户端长时间没发送数据而断开连接。
// 如果pingNotResponseLimit = 1，则代表客户端必须定时发送数据给服务端，否则pingNotResponseLimit*pingInterval=55秒内没有任何数据发来则关闭对应连接，并触发onClose。
$gateway->pingNotResponseLimit = $config['pingNotResponseLimit'];
// 心跳间隔
$gateway->pingInterval = $config['pingInterval'];
// 心跳数据
if (!empty($config['pingData'])) {
    $gateway->pingData = $config['pingData'];
}

/*
// 当客户端连接上来时，设置连接的onWebSocketConnect，即在websocket握手时的回调
$gateway->onConnect = function($connection)
{
    $connection->onWebSocketConnect = function($connection , $http_header)
    {
        // 可以在这里判断连接来源是否合法，不合法就关掉连接
        // $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket链接
        if($_SERVER['HTTP_ORIGIN'] != 'http://chat.workerman.net')
        {
            $connection->close();
        }
        // onWebSocketConnect 里面$_GET $_SERVER是可用的
        // var_dump($_GET, $_SERVER);
    };
};
*/

// 如果不是在根目录启动，则运行runAll方法
if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}
